#ifndef AUTOUPDATE_H
#define AUTOUPDATE_H

#include <QDialog>
#include <QUrl>
//网络相关头文件
#include <QSslError>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
//JSON相关头文件
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QMessageBox>
#include <QFile>
#include <QFileInfo>
#include <QDir>
#include <QTime>
#include <QElapsedTimer>
#include <QProcess>


QT_BEGIN_NAMESPACE
namespace Ui { class AutoUpdate; }
QT_END_NAMESPACE

class AutoUpdate : public QDialog
{
    Q_OBJECT

public:
    AutoUpdate(QWidget *parent = nullptr);
    ~AutoUpdate();
    QStringList args;
    void initAutoUpdate(QStringList args);

private:
    QNetworkAccessManager *	m_netManager;     //定义网络请求对象
    QNetworkAccessManager *	m_netManagerDown;     //定义网络请求对象
    QNetworkReply *			m_pReply;           //请求包的返回值
    QString					m_curVerison;    //定义当前软件的版本号
    QString					m_lastVerison;   //最新版本号
    QString					m_strRemoteUrl;  //远程更新配置文件地址
    QUrl					m_urlZipFiles;   //更新包远程下载地址
    QString                 m_zipFiles;     //更新压缩包文件名
    QString                 m_strFileName;  //更新包存储的本地路径+文件名
    QString                 m_exeFileName;  //本地可执行程序文件名
    QString					m_updateTime;
    QString					m_releaseNote;
    QString                 m_strTip;
    QElapsedTimer			m_downloadTime;
    int						m_nTime;

    QFile *m_file;//下载的文件
    qint64 m_nReceived;//下载文件时，已经接收的文件大小和总共大小
    qint64 m_nTotal;
    bool m_bIsFinished ;

private:

    void getAutoUpdateJsonFile();
    bool ParseJson(const QString &str);
    void DownLoadUpdateFiles();


private slots:

    void replyFinished(QNetworkReply *reply);   //json 文件下载结束
    void slotError();
    void slotSslErrors(QList<QSslError>);
    void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal);	//下载进度
    void ReplyHttpFinished();
    void ReplyError();
    void ReplyNewDataArrived();
    void on_btnCancel_clicked();
    void on_btnUpdate_clicked();

private:
    Ui::AutoUpdate *ui;
};
#endif // AUTOUPDATE_H
